

package com.wedu.modules.sys.controller;


import com.wedu.common.annotation.SysLog;
import com.wedu.common.utils.PageUtils;
import com.wedu.common.utils.R;
import com.wedu.common.validator.ValidatorUtils;
import com.wedu.modules.sys.entity.SysConfigEntity;
import com.wedu.modules.sys.service.SysConfigService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

/**
 * 系统配置信息
 *
 * @author wedu
 */
@RestController//是组合注解，结合了@Controller和@ResponseBody两个注解的功能，声明该类是控制器，是用来处理请求,生成响应数据并返回响应（返回的是JOSN格式的数据）的控制器
@RequestMapping("/sys/config")//是一个用来处理请求路径的注解，用在类上，表示类中的所有响应请求的方法都是以该路径为父路径。
public class SysConfigController extends AbstractController {
	@Autowired//可以自动将所需的依赖注入类属性或方法中
	private SysConfigService sysConfigService;//引用SysConfigService接口

	/**
	 * 所有配置列表
	 */
	@GetMapping("/list")//用于映射请求到GET类型的处理方法上，常用于检索信息
	@RequiresPermissions("sys:config:list")//写上权限，有该权限标识的用户，才能访问到请求
	//R 包装的工具类，返回提示信息和状态码还有一些数据
	public R list(@RequestParam Map<String, Object> params){//@RequestParam用于将指定的请求参数赋值给方法中的形参
		PageUtils page = sysConfigService.queryPage(params);//调用 sysConfigService中的queryPage方法获取一个PageUtils分页工具类page

		return R.ok().put("page", page);//put("page", page)是放入一个HashMap中,再返回一个R类型数据，R.ok()是创建一个R对象
	}


	/**
	 * 配置信息
	 */
	@GetMapping("/info/{id}")//用于映射请求到GET类型的处理方法上，常用于检索信息，{id}是路径变量，用于在URL中动态传递参数
	@RequiresPermissions("sys:config:info")//写上权限，有该权限标识的用户，才能访问到请求
	public R info(@PathVariable("id") Long id){//从请求的路径中提取名为 id 的路径变量，并将其绑定到id 参数，参数名与注解括号里的字符串要相同
		SysConfigEntity config = sysConfigService.getById(id);

		return R.ok().put("config", config);
	}

	/**
	 * 保存配置
	 */
	@SysLog("保存配置")//系统日志注解，注释当前方法的作用
	@PostMapping("/save")//用来处理客户端发送的 POST 请求的，可以自动将请求体中的数据转换为 Java 对象，提交数据
	@RequiresPermissions("sys:config:save")//写上权限，有该权限标识的用户，才能访问到请求
	public R save(@RequestBody SysConfigEntity config){////将HTTP请求的主体转换为方法的参数
		ValidatorUtils.validateEntity(config);//校验工具类
		sysConfigService.saveConfig(config);//保存配置信息

		return R.ok();
	}

	/**
	 * 修改配置
	 */
	@SysLog("修改配置")//系统日志注解，用于保存系统的操作日志
	@PostMapping("/update")//用来处理客户端发送的 POST 请求的，可以自动将请求体中的数据转换为 Java 对象
	@RequiresPermissions("sys:config:update")//写上权限，有该权限标识的用户，才能访问到请求
	public R update(@RequestBody SysConfigEntity config){
		ValidatorUtils.validateEntity(config);
		sysConfigService.update(config);

		return R.ok();
	}

	/**
	 * 删除配置
	 */
	@SysLog("删除配置")//系统日志注解，注释当前方法的作用
	@PostMapping("/delete")//用来处理客户端发送的 POST 请求的，可以自动将请求体中的数据转换为 Java 对象
	@RequiresPermissions("sys:config:delete")//写上权限，有该权限标识的用户，才能访问到请求
	public R delete(@RequestBody Long[] ids){
		sysConfigService.deleteBatch(ids);

		return R.ok();
	}

}
